package gestordeentidades;

import java.util.List;
import java.util.Map;
import gestordeentidades.persistance.DataBaseObject;
import gestordeentidades.persistance.interfaces.IDataBaseAdapter;
import gestordeentidades.persistance.interfaces.IPersistance;
import java.util.Collection;
import java.util.function.Predicate;

/**
 * Trabalho DAS - 2014/2015
 * @author a21210380, a21190325, a21210392
 */
public interface IGestor {
    
    public <T extends DataBaseObject> int getNextId(Class<T> entidade);
    
    public <T extends DataBaseObject> T procurarEntidadePeloID(Class<T> entidade, int id);
    public <T extends DataBaseObject> Collection<T> procurarPorTodasAsEntidadesComoColecao(Class<T> entidade);
    public <T extends DataBaseObject> Map<Integer, T> procurarPorTodasAsEntidadesComoMapa(Class<T> entidade);
    public <T extends DataBaseObject> List<T> filtrarEntidades(Class<T> entidade, Predicate<T> filtro);
    
    public <T extends DataBaseObject> boolean registarNovaEntidade(T entidade);
    public <T extends DataBaseObject> void registarEntidadeModificada(T entidade);
    public <T extends DataBaseObject> void registarEntidadeApagada(T entidade);
    public void commit();
    public void rollback();
    
    public IDataBaseAdapter getDataBaseAdapter();
    public IPersistance getPersistance();
}
